package algoU2A1;

import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

//Aufgabe 1:
//Schreiben Sie ein Java Programm, dass ein Bild einliest und ein Histogramm
//(„welche Farben werden wie oft verwendet“) über die verwendeten Farben
//erstellt. Das Histogramm soll die komplette Farbe und nicht die Farbanteile
//darstellen, d.h. es soll die Information, dass z.B. die Farbe 0xfff20017 123mal in
//dem Bild vorkommt. Es soll nicht berechnet werden, dass der Blauanteil 0x17
//423mal in irgendwelchen Farben in dem Bild vorkommen.

public class U2A1 {
	int[] m_Pix;
	int[][] m_Histogram;

	U2A1(BufferedImage img) {
		m_Pix=new int[img.getWidth()*img.getHeight()];
		PixelGrabber p = new PixelGrabber(img,0,0,img.getWidth(),img.getHeight(),m_Pix,0,img.getWidth());
		try {
			p.grabPixels();
		} catch (InterruptedException e) {
		}
		for(int i=0;i<m_Pix.length;++i)
			System.out.println(m_Pix[i]);
		m_Histogram = genHistogram();
	}

	public int[][] genHistogram() {
		int[] count;
		int min = m_Pix[0], max = 0, lengthOfHistogram = 0, writePosition = 0;
		int[][] histogram;

		for (int i = 0; i < m_Pix.length; ++i) {
			if (m_Pix[i] < min)
				min = m_Pix[i];
			if (m_Pix[i] > max)
				max = m_Pix[i];
		}
		System.out.println("min="+min+" max="+max);

		count = new int[max - min + 1];

		for (int i = 0; i < m_Pix.length; ++i) {
			++count[m_Pix[i] - min];
		}

		for (int i = 0; i < count.length; ++i) {
			if (count[i] != 0)
				++lengthOfHistogram;
		}

		histogram = new int[lengthOfHistogram][2];

		for (int i = 0; i < count.length; ++i) {
			if (count[i] != 0) {
				histogram[writePosition][1] = i;
				histogram[writePosition][0] = count[i];
				++writePosition;
			}
		}
		
		for(int i=0;i<histogram.length;++i){
			System.out.println(histogram[i][1]+"|"+histogram[i][0]);
		}
		
		return histogram;
	}

	public static void main(String[] args) {
		try {
			new U2A1(ImageIO.read(new File("C:/gruen_klein.bmp")));
		} catch (IOException e) {
			System.out.println("ImageFile not Found!");
		}
//		int[] count_test = new int[16711936];
//		for(int i=0;i<count_test.length;++i)
//			count_test[i]=0;
	}
}
